#include <iostream>
#include <string>
#include <vector>
#include "compiler.hpp"
#include "runner.hpp"
#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_compile;
using namespace ns_runner;
using namespace ns_compileandrun;

void Usage(const std::string &proc)
{
    std::cerr << "Usage : " << "\n\t" << proc << " port" << std::endl;
}

int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    // std::string code = "code";
    // Compiler::Compile(code);
    // Runner::Run(code);
    // 构造测试用例
    // Json::Value in_value;
    // std::string out_value;
    // in_value["code"] = R"(
    // #include <iostream>
    // int main(){
    //     //while(1);
    //     //int *p = new int[1024*1024*30];
    //     // int a = 10;
    //     // int b = a/0;
    //     std::cout << "hello jsoncpp" << std::endl;
    //     std::cerr << "hello oj" << std::endl;
    //     return 0;
    // })";
    // in_value["input"] = "12345";
    // in_value["mem_limit"] = 1024*20;  //kb为单位
    // in_value["cpu_limit"] = 1;

    // Json::StyledWriter write;
    // CompileAndRun::Start(write.write(in_value), &out_value);
    // std::cout << write.write(in_value) << std::endl;
    // std::cout << out_value << std::endl;

    // 引入网络库httplib

    // 将编译运行服务打包为网络服务
    httplib::Server svr;

    // svr.Get("/hi", [](const httplib::Request &, httplib::Response &res)
    //         { res.set_content("Hello World! 你好 cpp-httplib", "text/plain; charset=utf-8"); });

    svr.Post("/commpile_and_run", [](const httplib::Request &res, httplib::Response &resp)
             {
                 std::string in_value = res.body; // 请求正文为json串
                 std::string out_value;
                 if (!in_value.empty())
                 {
                     CompileAndRun::Start(in_value, &out_value);
                     resp.set_content(out_value, "application/json;charset=utf-8");
                 }
             });
    svr.listen("0.0.0.0", std::atoi(argv[1]));
    return 0;
}